
package com.crowdfunding.circle.common.tags;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;

/**
 * 列表排序组件
 *
 * @author 朱国军
 * @since 1.0
 * @version 2016年3月28日 朱国军
 */
public final class SortFieldTag extends TagSupport {

    private static Logger logger = Logger.getLogger(SortFieldTag.class);

    private static final long serialVersionUID = -7177581356703711990L;
    
    /** 题头展示名字 */
    private String name;
    
    /** 数据库字段名称 */
    private String field;

    /** 查询列表数据的js方法 */
    private String queryFunction;
    
    /** 分页标签显示位置或样式 */
    private String style;
    
    /** 当前的排序字段，用于初始化展示样式 */
    private String orderField;
    
    /** 当前排序字段的排序方式，用于初始化展示样式 */
    private String orderDirection;
    
    /**
     * 获取题头展示名字
     *
     * @return 题头展示名字
     */
    public String getName() {
        return name;
    }
    
    /**
     * 设置题头展示名字
     *
     * @param name 题头展示名字
     */
    public void setName(String name) {
        this.name = name;
    }
    
    /**
     * 获取数据库字段名称
     *
     * @return 数据库字段名称
     */
    public String getField() {
        return field;
    }
    
    /**
     * 设置数据库字段名称
     *
     * @param field 数据库字段名称
     */
    public void setField(String field) {
        this.field = field;
    }

    /**
     * 获取查询列表数据的js方法
     *
     * @return 查询列表数据的js方法
     */
    public String getQueryFunction() {
        return queryFunction;
    }

    /**
     * 设置查询列表数据的js方法
     *
     * @param queryFunction 查询列表数据的js方法
     */
    public void setQueryFunction(String queryFunction) {
        this.queryFunction = queryFunction;
    }

    /**
     * 获取分页标签显示位置或样式
     *
     * @return 分页标签显示位置或样式
     */
    public String getStyle() {
        return style;
    }

    /**
     * 设置 分页标签显示位置或样式
     *
     * @param style 分页标签显示位置或样式
     */
    public void setStyle(String style) {
        this.style = style;
    }

    /**
     * 获取当前的排序字段，用于初始化展示样式
     *
     * @return 当前的排序字段，用于初始化展示样式
     */
    public String getOrderField() {
        return orderField;
    }

    /**
     * 设置 当前的排序字段，用于初始化展示样式
     *
     * @param orderField 当前的排序字段，用于初始化展示样式
     */
    public void setOrderField(String orderField) {
        this.orderField = orderField;
    }

    /**
     * 获取 当前排序字段的排序方式，用于初始化展示样式
     *
     * @return 当前排序字段的排序方式，用于初始化展示样式
     */
    public String getOrderDirection() {
        return orderDirection;
    }

    /**
     * 设置 当前排序字段的排序方式，用于初始化展示样式
     *
     * @param orderDirection 当前排序字段的排序方式，用于初始化展示样式
     */
    public void setOrderDirection(String orderDirection) {
        this.orderDirection = orderDirection;
    }

    @Override
    public int doEndTag() throws JspException {
        return SortFieldTag.EVAL_PAGE;
    }

    @Override
    public int doStartTag() throws JspException {
        StringBuilder builder = new StringBuilder();
        String myStyle = style;
        if (StringUtils.isBlank(myStyle)) {
            myStyle = "cursor:pointer";
        } else if (!StringUtils.contains(style, "cursor:pointer")) {
            myStyle = style + ";cursor:pointer";
        }
        builder.append("<th style='").append(myStyle).append("' onclick=\"changeOrderDirction('").append(field).append("');");
        builder.append(queryFunction).append("(1)\">");
        builder.append(name).append("<span id='").append(field).append("_dirction' ");
        if (StringUtils.equals(field, orderField)) {
            if (StringUtils.equals("asc", orderDirection)) {
                builder.append(" class='asc'/>");
            } else if (StringUtils.equals("desc", orderDirection)) {
                builder.append(" class='desc'/>");
            } else {
                builder.append(" class='head'/>");
            }
        } else {
            builder.append(" class='head'/>");
        }

        builder.append("</th>");

        JspWriter writer = this.pageContext.getOut();
        try {
            writer.write(builder.toString().trim());
        } catch (IOException e) {
            logger.error("字典项转radio的Tag出错", e);
        }
        return SortFieldTag.SKIP_BODY;

    }
    
}
